package com.ynkbny.service.outsideinterface;

import com.alibaba.fastjson.JSONObject;
import com.dtflys.forest.annotation.JSONBody;
import com.dtflys.forest.annotation.Post;
import com.dtflys.forest.annotation.Request;
import com.dtflys.forest.annotation.Var;
import com.ynkbny.domain.pojo.ProcessConfigureAddVO;
import com.ynkbny.domain.pojo.TEpDataCollectConfigureAddVO;
import com.ynkbny.domain.pojo.TEpTotalEnergyVO;
import org.springframework.stereotype.Component;

/**
 * @author YY
 * @createDate 2023-07
 */

@Component
public interface MyClient {


    /**
     * 9.1.1 端系统申请工作密钥
     * @param enterpriseCode 统一社会信用代码（必填）
     * @param secretKey 原工作密钥（首次申请工作密钥，则无需此字段）
     * @return
     */
    @Post("#{mydata.url}"+"/YNEnergy/enterpriseInfo/rwk")
    JSONObject getWorkKey(@JSONBody("enterpriseCode") String enterpriseCode, @JSONBody("secretKey") String secretKey);

    /**
     * 9.1.5 端系统获取 AK(token)
     * @param enterpriseCode 统一社会信用代码
     * @param password 省级平台访问密码
     * @return
     */
    @Post("#{mydata.url}"+"/YNEnergy/requestAK")
    JSONObject getAK(@JSONBody("enterpriseCode") String enterpriseCode, @JSONBody("password") String password);

    /**
     * 9.5.3.1 用能单位能源资源计量采集数据 上传
     * @param token token
     * @param TEpTotalEnergyVO 传输对象
     * @return JSONObject
     */
    @Request(
            url = "#{mydata.url}"+"/YNEnergy/dataEnterpriseEnergy",
            headers = {"Authorization: Bearer ${AK}"},
            type = "post",
            dataType = "json"
    )
    JSONObject uploadDataEnterpriseEnergy(@Var("AK") String token, @JSONBody TEpTotalEnergyVO TEpTotalEnergyVO);

    /**
     * 9.4 平台基础数据下载
     */
    @Request(
            url = "#{mydata.url}"+"/YNEnergy/dataDownload",
            headers = {"Authorization: Bearer ${AK}"},
            type = "post",
            dataType = "json"
    )
    JSONObject dataDownload(@Var("AK") String token, @JSONBody("enterpriseCode") String enterpriseCode, @JSONBody("itemIndex") String itemIndex);

    /**
     * 9.1.1 端系统申请工作密钥
     *
     * @param url 地址
     * @param mapJson 需要的参数
     * @return 结果
     */
    @Post("${url}")
    String getSecretKey(@Var("url") String url, @JSONBody String mapJson);

    /**
     * 9.1.5 端系统获取 AK(token)
     * @param url 地址
     * @param mapJson 需要的参数
     * @return 结果
     */
    @Post("${url}")
    String getToken(@Var("url") String url, @JSONBody String mapJson);

    /**
     * 9.1.3 端系统注册申请 企业信息注册
     * @param url 地址
     * @param mapJson 需要的参数
     * @return 结果
     */
    @Post("${url}")
    String register(@Var("url") String url, @JSONBody String mapJson);

    /**
     * 9.1.3 端系统注册申请 企业信息修改
     * @param url 地址
     * @param mapJson 需要的参数
     * @return 结果
     */
    @Post("${url}")
    String updateByIdRegister(@Var("url") String url, @JSONBody String mapJson);

    /**
     * 9.5.2.4 用能单位数据采集配置项信息
     * @param token token
     * @param tEpDataCollectConfigureAddVO 参数对象
     */
    @Request(
            url = "#{mydata.url}"+"/YNEnergy/dataCollectConfigure/add",
            headers = {"Authorization: Bearer ${AK}"},
            type = "post",
            dataType = "json"
    )
    JSONObject dataCollectConfigureAdd(@Var("AK") String token, @JSONBody TEpDataCollectConfigureAddVO tEpDataCollectConfigureAddVO);

    /**
     *
     * @param token token
     * @param processConfigureAddVO 用能单位生产工序信息 上传对象
     * @return json对象
     */
    @Request(
            url = "#{mydata.url}"+"/YNEnergy/processConfigure/add",
            headers = {"Authorization: Bearer ${AK}"},
            type = "post",
            dataType = "json"
    )
    JSONObject processConfigureAddVO(@Var("AK") String token, @JSONBody ProcessConfigureAddVO processConfigureAddVO);

    /**
     * 用户登录
     *
     * @param url 请求路径
     * @return
     */
    @Post("${url}")
    String login(@Var("url") String url);

    /**
     * 老狗 QueryDeviceByProject - 查询项目的设备列表
     *
     * @param url 地址
     * @return 结果
     */
    @Post(url = "${url}",headers = {"__sid: ${token}"})
    String queryDeviceByProject(@Var("url") String url, @Var("token") String token);

    /**
     * 老狗 - 查询项目设备的属性快照
     *
     * @param url 地址
     * @return 结果
     */
    @Post(url = "${url}",headers = {"Cookie:JSESSIONID=${token}"})
    String QueryProjectDeviceParamStatus(@Var("url") String url, @Var("token") String token);


    /**
     * 老狗 - 查询项目列表
     *
     * @param url 地址
     * @return 结果
     */
    @Post(url = "${url}",headers = {"__sid: ${token}"})
    String queryProjectList(@Var("url") String url, @Var("token") String token);

    /**
     * 老狗 - 批量查询属性的历史数据
     *
     * @param url 地址
     * @return 结果
     */
    @Post(url = "${url}",headers = {"__sid: ${token}"})
    String QueryDeviceParamHistoryData(@Var("url") String url, @Var("token") String token);

    /**
     * QueryRegionByProject - 查询项目下的区域列表
     *
     * @param url 地址
     * @return 结果
     */
    @Post(url = "${url}",headers = {"__sid: ${token}"})
    String QueryRegionByProject(@Var("url") String url, @Var("token") String token);

    /**
     * 上传基础数据
     * @param url url
     * @param token AK
     * @return
     */
    @Post(url = "${url}", headers = {"Authorization: Bearer ${AK}"})
    JSONObject pushBaseData(@Var("url") String url, @Var("AK") String token, @JSONBody Object object);
}
